from typing import List, IO

from llama_index.core.schema import Document
from llama_index.readers.file import ImageReader

from ..data_parser_interface import DataParserInterface


class ImageParser(DataParserInterface):
    """
    一个专门用于解析图片文件 (如 .png, .jpg) 的解析器。
    它封装了 LlamaIndex 的 ImageReader，可以集成 OCR 模型从图片中提取文字。
    """

    def __init__(self, ocr_model: str = "tesseract", **kwargs):
        """
        初始化图片解析器。

        Args:
            ocr_model (str): 要使用的 OCR 模型名称。'tesseract' 是一个常见的默认选项。
                           也可以配置为其他 LlamaIndex 支持的模型。
            **kwargs: 传递给 ImageReader 的其他参数。
        """
        self._reader = ImageReader(text_type=ocr_model, **kwargs)

    def parse(self, file: IO[bytes], **kwargs) -> List[Document]:
        """
        从图片文件的二进制流中解析出文本内容。
        ImageReader可以直接处理文件流，因此无需创建临时文件。
        """
        # 直接将文件流传递给 LlamaIndex 的加载器
        return self._reader.load_data(file=file, **kwargs) 